package com.sky.config;

import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.sky.properties.AliOssProperties;
import com.sky.utils.AliOssUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

//第三方的配置类，主动将bean对象交给IOC容器管理
//原理:在sping容器启动时会自动的执行该方法，然后将该方法的返回值对象交给IOC容器，成为IOC容器里面的bean
//在这个bean对象依赖于其他的bean对象时，通过形参的方式进行注入依赖
@Configuration
@Slf4j
public class OssConfiguration {
    //将依赖的对象以参数的形式进行注入
    //在第三方的实例要放入容器中时需要使用bean
    private final AliOssProperties aliOssProperties;
    //使用构造函数进行存储数据
    public OssConfiguration(AliOssProperties aliOssProperties){
        this.aliOssProperties = aliOssProperties;
    }
    //将阿里云的oss对象放入容器中
    @Bean
    public OSS ossClient(){
        return new OSSClientBuilder().build(
                aliOssProperties.getEndpoint(),
                aliOssProperties.getAccessKeyId(),
                aliOssProperties.getAccessKeySecret()
        );
    }
    //将阿里云的ossUtil放入容器中
    @Bean
    @ConditionalOnMissingBean
    public AliOssUtil aliOssUtil(OSS ossClient, AliOssProperties aliOssProperties){
         return new AliOssUtil(ossClient,aliOssProperties);
    }

}
